package com.yqh;

import java.util.*;

/**
 * 集合的工具类 Collections
 *
 * @author 阳秋豪
 * @createTime 2024/3/6
 */
public class Test2 {
    public static void main(String[] args) {
        /*---------------------- 前置知识 ———— 可变参数 ----------------------*/
        // 定义：就是一种特殊形参，定义在方法、构造器的形参列表里，格式是:数据类型...参数名称
        // 特点：可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它
        // 好处：常常用来灵活的接收数据。
        // 注意事项1：一个形参列表中，只能有一个可变参数
        // 注意事项2：可变参数必须放在形参列表的最后面

        /*---------------------- Collections 的常用方法 ----------------------*/
        // 1、public static <T> boolean addAll(Collection<? super T> c, T... elements)
        // 描述 -- 将所有指定元素添加到指定集合中
        Collection<String> collection = new ArrayList<>();
        Collections.addAll(collection, "张三", "李四", "王五");
        System.out.println(collection); // [张三, 李四, 王五]
        System.out.println("---------------------------------------------");

        // 2、public static void shuffle(List<?> list)
        // 描述 -- 随机打乱集合中的元素顺序
        List<String> list = new ArrayList<>(List.copyOf(collection));
        System.out.println("打乱前" + list); // 打乱前[张三, 李四, 王五]
        Collections.shuffle(list);
        System.out.println("打乱后" + list); // 打乱后[王五, 张三, 李四]
        System.out.println("---------------------------------------------");

        // 3、public static <T extends Comparable<? super T>> void sort(List<T> list)
        // 描述 -- 根据元素的自然顺序（Comparable 接口）对集合进行升序排序
        List<Integer> list1 = new ArrayList<>();
        Collections.addAll(list1, 1, 5, 6, 3, 5, 9, 4, 7, 1, 6);
        System.out.println("排序前" + list1); // 排序前[1, 5, 6, 3, 5, 9, 4, 7, 1, 6]
        Collections.sort(list1);
        System.out.println("排序后" + list1); // 排序后[1, 1, 3, 4, 5, 5, 6, 6, 7, 9]
        System.out.println("---------------------------------------------");

        // 4、public static <T> void sort(List<T> list,Comparator<?super T>c)
        // 根据指定比较器的规则对指定集合进行排序
        List<Integer> list2 = new ArrayList<>();
        Collections.addAll(list2, 1, 5, 6, 3, 5, 9, 4, 7, 1, 6);
        System.out.println("排序前" + list2); // 排序前[1, 5, 6, 3, 5, 9, 4, 7, 1, 6]
        Collections.sort(list2, (o1, o2) -> o2 - o1); // 比较器规则：逆序
        System.out.println("排序后" + list2); // 排序后[9, 7, 6, 6, 5, 5, 4, 3, 1, 1]

        // 5、其他常用方法
        // max() 求最大值
        // min() 求最小值
    }
}
